const http = require("http")
const fs = require("fs")
const url = require("url")
const qs = require("querystring")

// http://localhost:81/api?type=login&username=admin&password=1231321
// http://localhost:81/api?type=register&username=admin&password=1231321

// 1. 开启服务器
http.createServer((req, res)=>{
    if(req.url !== "/favicon.ico"){
        // /api:数据请求
        // else：文件请求
        if(req.url.includes("/api")){
            ajax(req,res)
        }else{
            file(req,res)
        }
    }
}).listen(81,()=>{
    console.log("服务器开启成功......")
});

function ajax(req,res){
    // 先处理数据：地址栏或非地址栏
    let str = "";
    req.on("data",(d)=>{
        str += d
    })
    req.on("end",()=>{
        let msg = null;
        if(str){
            // 非地址栏
            msg = qs.parse(str)
        }else{
            // 地址栏
            const urlObj = url.parse(req.url, true)
            msg = urlObj.query
        }
        // 绝对拿到前端过来的数据（不论get还是post）
        // console.log(msg)

        // 假设用户发送的数据中有type字段，值可能为login或register
        if(msg.type === "login"){
            login(req, res, msg)
        }else if(msg.type === "register"){
            register(req, res, msg)
        }
    })
}

// 存，数据库
// 直接存变量

// let userMsg = [{username:"admin",password:124456},{},{}];
let userMsg = [];

// 注册：存储用户数据
// 登录：读取用户数据

function register(req,res,msg){
    // console.log("注册")
    // 准备状态，用来记录是否出现重复用户名
    let flag = false;
    // 遍历现有数据
    for(let i=0;i<userMsg.length;i++){
        // 将现有数据和前端数据做比较
        if(userMsg[i].username === msg.username){
            // 如果有重复，修改状态，结束循环
            flag = true;
            break;
        }
    }
    // 判断状态是否被修改为true
    if(flag){
        // 为true：用户名重复
        res.write(JSON.stringify({code:0,title:"用户名重复",msg:""}))
    }else{
        // 为false：没有找到重复数据，添加用户数据
        userMsg.push({
            username: msg.username,
            password: msg.password
        })
        // 注册成功
        res.write(JSON.stringify({code:1,title:"注册成功",msg:""}))
    }
    res.end();
}

function login(req,res,msg){
    // console.log("登录")
    // 从总数据找到前端过来的数据，验证
    let i=0;
    let flag = userMsg.some((val,idx)=>{
        i = idx;
        return val.username === msg.username
    })
    if(flag){
        if(userMsg[i].password === msg.password){
            // 登录成功
            // res.write("登录成功")
            // res.write(userMsg[i])
            userMsg[i].isLogin = "ok"
            res.write(JSON.stringify({code:1,title:"登录成功",msg:userMsg[i]}))
        }else{
            // 密码不符
            res.write(JSON.stringify({code:0,title:"密码不符",msg:""}))
        }
    }else{
        // 用户名不存在
        res.write(JSON.stringify({code:2,title:"用户名不存在",msg:""}))
    }


    res.end();
}


function file(req,res){
    const urlObj = url.parse(req.url)
    fs.readFile("./www" + urlObj.pathname, (err, data)=>{
        if(err){
            res.write("404")
        }else{
            res.write(data)
        }
        res.end()
    })
}



